package main

import "fmt"

//在本例中，以下三行，写不写都一样
type Phone interface {
	call()
}

type xiaoMi struct {
	name string
}

//实现接口的call方法
func (this xiaoMi) call() {
	fmt.Println(this.name, " 打电话")
}

//给结构体xiaoMi，增加了另一个方法，注意这个方法不属于接口 Phone
func (this xiaoMi) sendWechat() {
	fmt.Println(this.name, " 可以发微信")
}

func main() {
	//接上例，如何让 phone 可以调用 sendWechat 方法呢？
	//答案是可以不显示的声明为 Phone接口类型.但要清楚 phone 对象实际上是隐式的实现了 Phone 接口，如此一来，方法的调用就不会受到接口类型的约束。
	phone := xiaoMi{name: "小米Mix3"}
	phone.call()
	phone.sendWechat()
}
